iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0

前言

  • 在設計完上傳相片功能後,過程中似乎還需要一併記錄些訊息,之後使用者才可以方便撈出資料。

概念

  • 大家應該都有使用過表格來記錄資料的經驗,而關聯式資料,指的就是多張表格,有效率地記錄資料。
  • 好比班上的總務股長,幫全班同學代訂便當,他就會使用一張表格來記錄每一天的飯統,統計的統。
  • 假設全班有九個人,固定和同一家便當店訂餐,只用一張表格記錄,寫滿的話就換一張紙。
日期 訂購人 便當名稱 價格 繳費 手機號碼
2023-09-20 二坪山小弱砲 三杯雞飯 80 True 0911111111
2023-09-20 Hugo 日式咖哩牛肉飯加蛋 150 False 0922222222
2023-09-20 Marco 港式燒臘飯 100 True 0933333333
2023-09-20 裸男 滷排骨飯 80 True 0944444444
2023-09-20 Jerry 炸雞腿飯 100 True 0955555555
2023-09-20 Rita 三杯雞飯 80 False 0966666666
2023-09-20 John 豬肉燴飯 80 False 0977777777
2023-09-20 Howsin 半雞飯 200 True 0988888888
2023-09-20 Jasper 沒訂 null null 0999999999
2023-09-21 二坪山小弱砲 三杯雞飯 80 True 0911111111
2023-09-21 Hugo 日式咖哩牛肉飯 130 False 0922222222
2023-09-21 Marco 港式燒臘飯 100 True 0933333333
2023-09-21 裸男 炸排骨飯 80 True 0944444444
2023-09-21 Jerry 滷雞腿飯x2 130x2 True 0955555555
2023-09-21 Rita 來一客 30 False 0966666666
2023-09-21 John 豬肉燴飯 80 False 0977777777
2023-09-21 Howsin 半雞飯 200 True 0988888888
2023-09-21 Jasper 依然沒訂 null null 0999999999
  • 這表格有幾個特色:
    • 每天都要看誰還沒訂,如果都有傳閱過了,那正常會固定產生九筆資料。
    • 這張表格上重複記錄了一些內容...好比電話和人名,這關係不會隨時變動,兩個同時記錄會提高記錄成本和查詢的成本。
    • 同一天的產品價格,理論上不會因人而異,相同的三杯雞飯,在九月二十日的話都是賣八十元。因此記錄他買了什麼就可以了,至於價格應該可以另外放在每日價目對照表中。
  • 於是就有 資料正規化 的需求誕生。 把不同資料表格的關係/關聯性找出來,並且透過 關鍵 作為參照,就是 Key。
  • 什麼是 Key?
    • Model 和 Model 之間存在的關係,例如:
    • 小弱砲訂了三杯雞飯
    • 裸男訂了炸排骨飯
    • Marco訂了港式燒臘飯
    • Jerry訂了滷雞腿飯x2
  • 沒有人規定只能訂一項產品,畢竟一個便當吃不飽,就應該吃兩個!學學 Jerry
  • 然而便當這種東西,店家有規定不能只買半份,所以對於便當而言,都會被賣給某一個人。
  • 人和手機的關係,一個號碼只能有一個主人;一個人可以有好幾支手機號碼。

關於 Amplify DataStore

  • 是由 Amazon DynamoDB 作為儲存的平台。
  • 並使用 AWS AppSync 提供 API 對外存取。

DynamoDB 簡介

Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale but making it work for your access patterns requires a bit of forethought. DynamoDB query operations may use at most two attributes to efficiently query data. The first query argument passed to a query (the hash key) must use strict equality and the second attribute (the sort key) may use gt, ge, lt, le, eq, beginsWith, and between. DynamoDB can effectively implement a wide variety of access patterns that are powerful enough for the majority of applications.

  • 標榜讀取資料非常快速,可以在個位數毫秒的時間內進行資料提取。原理是透過 Hash 雜湊的方式,進行資料的索引編排。
  • 這麼快也是有所限制,例如不能給複雜的查詢條件,最多就是兩個。

Data Modeling

Amplify automatically creates Amazon DynamoDB database tables for GraphQL types annotated with the @model directive in your GraphQL schema. You can create relations between the data models via the @hasOne, @hasMany, @belongsTo, and @manyToMany directives.

  • 所有的關係可以理解成,hasOne, hasMany, belongsTo 或 manyToMany

參考資料


上一篇
【Day 18】 從開源範例中學習: aws-amplify
下一篇
【Day 20】 相片五部曲之一: 藉由 ImagePicker 選擇讀取相片來源
系列文
依然無法成為釣魚大師也要努力摸魚!!辣個吃魚神器 APP 第二彈33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言